package com.fc.mall.portal.service;

import com.alibaba.fastjson.JSONObject;
import com.fc.mall.base.object.Result;
import com.fc.mall.model.UmsMember;
import com.fc.mall.portal.dto.AgentBasicInfo;
import com.fc.mall.portal.dto.DecodePhoneParam;
import com.fc.mall.portal.dto.LoginReqDto;
import com.fc.mall.portal.dto.WxUserInfo;
import com.fc.mall.vo.MemberFansVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.Map;

/**
 * 会员管理Service
 * Created by dobuy on 2018/8/3.
 */
public interface UmsMemberService {
    /**
     * 根据用户名获取会员
     */
    UmsMember getByUsername(String username);
    /**
     * 根据wxOpenId获取会员
     */
    public UmsMember getByWxOpenId(String wxOpenId);
    /**
     * 根据会员编号获取会员
     */
    UmsMember getById(Long id);

    /**
     * 用户注册
     */
    @Transactional
    Result register(String username, String password, String telephone, String authCode);

    /**
     * 生成验证码
     */
    Result generateAuthCode(String telephone);

    /**
     * 修改密码
     */
    @Transactional
    Result updatePassword(String telephone, String password, String authCode);

    void updateMemberInfo(WxUserInfo wxUserInfo);

    /**
     * 获取当前登录会员
     */
    UmsMember getCurrentMember();

    /**
     * 根据会员id修改会员积分
     */
    void updateIntegration(Long id,Integer integration);

    Result wxLogin(LoginReqDto loginReqDto);

    /**
     * 获取当前会员的信息
     * @return
     */
    Result getMemberDetail();

    /**
     * 获取当前登陆会员的粉丝会员
     * @return
     */
    MemberFansVO getMemberFans(Map<String, Object> params);

    JSONObject getMyReferrer();
    /**
     * 会员下订单时需要调用该接口
     * @param umsMember
     */
    void convertToEffectiveMember(UmsMember umsMember);

    /**
     * 邀请会员后，更新一段时间内未购物的会员锁定状态为游离状态
     */
    void resetMemberLockStatus();

    /**
     * 回收过期的优惠券
     */
    void recoveryExpiredCoupon();


    /**
     * 生成属于自己的推荐二维码图片
     * @return
     */
    byte[] generateQrCode(String page, Map<String, Object> params);

    /**
     * 获取代理合伙人基本信息
     * @return
     */
    AgentBasicInfo getAgentBasicInfo();

    int updateMemberWxAppPhone( DecodePhoneParam decodePhoneParam);





}
